﻿Public Class frmCrearEjercito

    Dim contamagos, opcionPersonaje, opcionBola, opcionDeb, opcionTel, opcionMet As Integer

    Private Sub frmCrearEjercito_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim listapuntos() As Integer = {50, 100, 150}
        For Each l In listapuntos
            CboPuntosIniciales.Items.Add(l)
        Next
        Dim valorinf As New Infanteria
        Dim valorsarg As New Sargento
        Dim valorarq As New Arquero
        Dim valormosq As New Mosquetero
        Dim valorcab As New Caballeria
        Dim valorpal As New Paladin
        Dim valordrag As New Dragon
        Dim valormag As New Mago("")
        Dim valorarch As New Archimago("")
        Dim valorcamp As New Campeon("")
        Dim valorcom As New Comandante("")

        BtnAñadirArquero.Text = "Añadir Arquero (" & valorarq.Coste & ")"
        BtnAñadirArchimago.Text = "Añadir Archimago (" & valorarch.Coste & ")"
        btnAñadirCaballeria.Text = "Añadir Caballeria (" & valorcab.Coste & ")"
        btnAñadirPaladin.Text = "Añadir Paladin (" & valorpal.Coste & ")"
        btnAñadirMosquetero.Text = "Añadir Mosquetero (" & valormosq.Coste & ")"
        BtnAñadirInfan.Text = "Añadir Infantería (" & valorinf.Coste & ")"
        btnSargento.Text = "Añadir Sargento (" & valorsarg.Coste & ")"
        btnAñadirMago.Text = "Añadir Mago (" & valormag.Coste & ")"
        btnAñadirCampeon.Text = "Añadir Campeón (" & valorcamp.Coste & ")"
        btnAñadirComandante.Text = "Añadir Comandante (" & valorcom.Coste & ")"
        btnAñadrDragon.Text = "Añadir Dragón (" & valordrag.Coste & ")"

        BtnAgregar.Visible = False
        lblPuntos.Text = CboPuntosIniciales.SelectedItem
        gboxHechizos.Visible = False
        txtNombre.Visible = False
        TxtInfo.Visible = False
        lblNombre.Visible = False
        txtNombre.Visible = False
        gbBatallones.Enabled = False
        gbMagos.Enabled = False
        gbCampeones.Enabled = False
        CboJugador.Enabled = False
        btnTerminar.Enabled = False
    End Sub

    Private Sub Combo_Cambiar_Jugador(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CboJugador.SelectedIndexChanged
        jugadoractual = CboJugador.SelectedItem
        lblPuntos.Text = jugadoractual.puntos
        btnAñadrDragon.Enabled = True
        BtnAgregar.Visible = False
        txtNombre.Text = Nothing
        txtNombre.Visible = False
        lblNombre.Visible = False
        gbBatallones.Enabled = True
        gbMagos.Enabled = True
        gbCampeones.Enabled = True
        btnTerminar.Enabled = True
    End Sub

    Private Sub Combo_Puntos_Iniciales(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CboPuntosIniciales.SelectedIndexChanged
        Jugador1.puntos = CboPuntosIniciales.SelectedItem
        Jugador2.puntos = CboPuntosIniciales.SelectedItem
        CboPuntosIniciales.Enabled = False
        lblPuntos.Text = CboPuntosIniciales.SelectedItem
        CboJugador.Enabled = True
        Jugador1.Nombre = InputBox("Jugador1 escoge nombre")
        Jugador2.Nombre = InputBox("Jugador2 escoge nombre")
        CboJugador.Items.Add(Jugador1)
        CboJugador.DisplayMember = "Nombre"
        CboJugador.Items.Add(Jugador2)
        CboJugador.DisplayMember = "Nombre"
    End Sub

    Private Sub Btn_Añadir_Infanteria(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAñadirInfan.Click
        Dim unidad As New Infanteria
        If Comprobarpuntosrestantes(unidad) = False Then
            MessageBox.Show("Puntos insuficientes")
            Exit Sub
        End If
        jugadoractual.puntos = jugadoractual.puntos - Mijuego.CrearUnidad(1)
        lblPuntos.Text = jugadoractual.puntos
        gboxHechizos.Visible = False
    End Sub

    Private Sub Btn_Añadir_Sargento(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSargento.Click
        Dim unidad As New Sargento
        If Comprobarpuntosrestantes(unidad) = False Then
            MessageBox.Show("Puntos insuficientes")
            Exit Sub
        End If
        jugadoractual.puntos = jugadoractual.puntos - Mijuego.CrearUnidad(2)
        lblPuntos.Text = jugadoractual.puntos
        gboxHechizos.Visible = False
    End Sub

    Private Sub Btn_Añadir_Caballeria(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAñadirCaballeria.Click
        Dim unidad As New Caballeria
        If Comprobarpuntosrestantes(unidad) = False Then
            MessageBox.Show("Puntos insuficientes")
            Exit Sub
        End If
        jugadoractual.puntos = jugadoractual.puntos - Mijuego.CrearUnidad(5)
        lblPuntos.Text = jugadoractual.puntos
    End Sub

    Private Sub Btn_Añadir_Paladin(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAñadirPaladin.Click
        Dim unidad As New Paladin
        If Comprobarpuntosrestantes(unidad) = False Then
            MessageBox.Show("Puntos insuficientes")
            Exit Sub
        End If
        jugadoractual.puntos = jugadoractual.puntos - Mijuego.CrearUnidad(6)
        lblPuntos.Text = jugadoractual.puntos
        gboxHechizos.Visible = False
    End Sub

    Private Sub Btn_Añadir_Arquero(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAñadirArquero.Click
        Dim unidad As New Arquero
        If Comprobarpuntosrestantes(unidad) = False Then
            MessageBox.Show("Puntos insuficientes")
            Exit Sub
        End If
        jugadoractual.puntos = jugadoractual.puntos - Mijuego.CrearUnidad(3)
        lblPuntos.Text = jugadoractual.puntos
        gboxHechizos.Visible = False
    End Sub

    Private Sub Btn_Añadir_Mosquetero(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAñadirMosquetero.Click
        Dim unidad As New Mosquetero
        If Comprobarpuntosrestantes(unidad) = False Then
            MessageBox.Show("Puntos insuficientes")
            Exit Sub
        End If
        jugadoractual.puntos = jugadoractual.puntos - Mijuego.CrearUnidad(4)
        lblPuntos.Text = jugadoractual.puntos
        gboxHechizos.Visible = False
    End Sub

    Private Sub Btn_Añadir_Dragon(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAñadrDragon.Click
        Dim unidad As New Dragon
        Dim dragones As Integer = 0
        If Comprobarpuntosrestantes(unidad) = False Then
            MessageBox.Show("Puntos insuficientes")
            Exit Sub
        End If
        If jugadoractual.Equals(Jugador1) Then
            For Each dr In jugadoractual.listadrag
                If dr.GetType = GetType(Dragon) Then
                    dragones += 1
                End If
            Next
            If dragones = 0 Then
                jugadoractual.puntos = jugadoractual.puntos - Mijuego.CrearUnidad(7)
                lblPuntos.Text = jugadoractual.puntos
            ElseIf dragones <> 0 Then
                MessageBox.Show("No puedes comprar mas dragones")
                btnAñadrDragon.Enabled = False
            End If
        End If
        If jugadoractual.Equals(Jugador2) Then
            For Each dr In jugadoractual.listadrag
                If dr.GetType = GetType(Dragon) Then
                    dragones += 1
                End If
            Next
            If dragones = 0 Then
                jugadoractual.puntos = jugadoractual.puntos - Mijuego.CrearUnidad(7)
                lblPuntos.Text = jugadoractual.puntos
            ElseIf dragones <> 0 Then
                MessageBox.Show("No puedes comprar mas dragones")
                btnAñadrDragon.Enabled = False
            End If
        End If
        gboxHechizos.Visible = False
    End Sub

    Private Sub Btn_Elegir_Mago(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAñadirMago.Click
        Dim unidad As New Mago("")
        If Comprobarpuntosrestantes(unidad) = False Then
            MessageBox.Show("Puntos insuficientes")
            Exit Sub
        End If
        TxtInfo.Text = "Indica un nombre para el mago, e indica si lo deseas que hechizos vas a comprar. Después presiona el botón Agregar personaje para confirmar"
        TxtInfo.Visible = True
        gboxHechizos.Visible = True
        ChkTeleportar.Visible = False
        ChkMeteorito.Visible = False
        ChkBolaFuego.Checked = False
        ChkDebilidad.Checked = False
        lblNombre.Visible = True
        txtNombre.Visible = True
        BtnAgregar.Visible = True
        opcionPersonaje = 1
    End Sub

    Private Sub Btn_Elegir_Archimago(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAñadirArchimago.Click
        Dim unidad As New Archimago("")
        If Comprobarpuntosrestantes(unidad) = False Then
            MessageBox.Show("Puntos insuficientes")
            Exit Sub
        End If
        TxtInfo.Text = "Indica un nombre para el archimago, e indica si lo deseas que hechizos vas a comprar. Después presiona el botón Agregar personaje para confirmar"
        TxtInfo.Visible = True
        gboxHechizos.Visible = True
        ChkMeteorito.Visible = True
        ChkTeleportar.Visible = True
        ChkMeteorito.Checked = False
        ChkTeleportar.Checked = False
        ChkBolaFuego.Checked = False
        ChkDebilidad.Checked = False
        lblNombre.Visible = True
        txtNombre.Visible = True
        BtnAgregar.Visible = True
        opcionPersonaje = 2
        contamagos += 1
    End Sub

    Private Sub Btn_Elegir_Campeon(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAñadirCampeon.Click
        Dim unidad As New Campeon("")
        If Comprobarpuntosrestantes(unidad) = False Then
            MessageBox.Show("Puntos insuficientes")
            Exit Sub
        End If
        TxtInfo.Text = "Indica un nombre para el campeón. Después presiona el botón Agregar personaje para confirmar"
        TxtInfo.Visible = True
        lblNombre.Visible = True
        txtNombre.Visible = True
        BtnAgregar.Visible = True
        opcionPersonaje = 3
        gboxHechizos.Visible = False
    End Sub

    Private Sub Btn_Elegir_Comandante(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAñadirComandante.Click
        Dim unidad As New Comandante("")
        If Comprobarpuntosrestantes(unidad) = False Then
            MessageBox.Show("Puntos insuficientes")
            Exit Sub
        End If
        TxtInfo.Text = "Indica un nombre para el Comandante. Recuerda que sólamente puede (y debe) haber un Comandante en tu ejército. Después presiona el botón Agregar personaje para confirmar"
        TxtInfo.Visible = True
        lblNombre.Visible = True
        txtNombre.Visible = True
        BtnAgregar.Visible = True
        opcionPersonaje = 4
        gboxHechizos.Visible = False
    End Sub

    Private Sub BtnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAgregar.Click
        If IsNothing(txtNombre.Text) Or txtNombre.Text = "" Then
            MessageBox.Show("Todo personaje debe tener un nombre")
            Exit Sub
        End If
        If ChkBolaFuego.Checked = True Then
            opcionBola = 1
        End If
        If ChkDebilidad.Checked = True Then
            opcionDeb = 1
        End If
        If ChkTeleportar.Checked = True Then
            opcionTel = 1
        End If
        If ChkMeteorito.Checked = True Then
            opcionTel = 1
        End If
        Select Case (opcionPersonaje)
            Case Is = 1
                Dim unidad1 As New Mago("")
                If Comprobarpuntosrestantes(unidad1) = False Then
                    MessageBox.Show("Puntos insuficientes")
                    Exit Sub
                End If
                lblPuntos.Text = lblPuntos.Text - Mijuego.CrearMago(1, txtNombre.Text, opcionBola, opcionDeb, opcionTel, opcionMet)
                gboxHechizos.Visible = False
            Case Is = 2
                Dim unidad2 As New Archimago("")
                If Comprobarpuntosrestantes(unidad2) = False Then
                    MessageBox.Show("Puntos insuficientes")
                    Exit Sub
                End If
                If contamagos <= 3 Then
                    lblPuntos.Text = lblPuntos.Text - Mijuego.CrearMago(2, txtNombre.Text, opcionBola, opcionDeb, opcionTel, opcionMet)
                    gboxHechizos.Visible = False
                Else
                    MessageBox.Show("Número máximo de Archimagos alcanzado, escoge otras tropas para tu ejército")
                End If
            Case Is = 3
                Dim unidad3 As New Campeon("")
                If Comprobarpuntosrestantes(unidad3) = False Then
                    MessageBox.Show("Puntos insuficientes")
                    Exit Sub
                End If
                jugadoractual.puntos = jugadoractual.puntos - Mijuego.CrearPersonaje(1, txtNombre.Text)
                lblPuntos.Text = jugadoractual.puntos
            Case Is = 4
                Dim unidad4 As New Comandante("")
                If Comprobarpuntosrestantes(unidad4) = False Then
                    MessageBox.Show("Puntos insuficientes")
                    Exit Sub
                End If
                jugadoractual.puntos = jugadoractual.puntos - Mijuego.CrearPersonaje(2, txtNombre.Text)
                lblPuntos.Text = jugadoractual.puntos
                txtNombre.Text = Nothing
        End Select
    End Sub

    Private Sub Btn_Terminar(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTerminar.Click
        Dim comandante1, comandante2 As Integer
        For Each com In Jugador1.listacamp
            If com.GetType = GetType(Comandante) Then
                comandante1 += 1
            End If
        Next
        For Each com In Jugador2.listacamp
            If com.GetType = GetType(Comandante) Then
                comandante2 += 1
                Exit For
            End If
        Next
        If (comandante1 + comandante2) <> 2 Then
            Jugador1.listainf.Clear()
            Jugador1.listaarq.Clear()
            Jugador1.listacab.Clear()
            Jugador1.listadrag.Clear()
            Jugador1.listamago.Clear()
            Jugador1.listacamp.Clear()
            Jugador2.listainf.Clear()
            Jugador2.listaarq.Clear()
            Jugador2.listacab.Clear()
            Jugador2.listadrag.Clear()
            Jugador2.listamago.Clear()
            Jugador2.listacamp.Clear()
            Jugador1.puntos = CboPuntosIniciales.SelectedItem
            Jugador2.puntos = CboPuntosIniciales.SelectedItem
            lblPuntos.Text = CboPuntosIniciales.SelectedItem
            MessageBox.Show("Un ejercito debe tener uno y solo un comandante. Vuelve a empezar la seleccion del ejército")
            Exit Sub
        End If
        Mijuego.OrganizarEjercito(0)
    End Sub

    Public Function Comprobarpuntosrestantes(ByVal unidad As UnidadBase) As Boolean
        If Integer.Parse(lblPuntos.Text) < unidad.Coste Then
            Return False
        End If
        Return True
    End Function
End Class